#2017年省赛-程序设计题 小朋友崇拜圈
import sys
sys.setrecursionlimit(10**6)

def dfs(x, cnt, id):  # x 表示当前节点，cnt 表示当前边的编号，id 表示当前路线编号
    global ans
    if vis[x] and vis[x] != id:  # 如果 x 已经被其它路线标记过了，则返回
        return
    if vis[x]:  # 找到了环边
        # 更新最大环数：cnt表示当前边的编号+1，要减去环内第一条边的编号
        ans = max(ans, cnt - num[x])
        return
    vis[x] = id  # 为当前节点打上标记
    num[x] = cnt  # 为当前边记录编号
    dfs(nex[x], cnt + 1, id)  # 遵循临接表递归，边的编号 + 1，id 不变

n = int(input())
nex = [0] + list(map(int, input().split()))  # 记录邻接表
vis = [0] * (n + 1)  # 标记节点是否被访问过
num = [0] * (n + 1)  # 每个节点对应的边的编号
ans = 0  # 每次遍历改变起点和其 id

for i in range(1, n + 1):
    dfs(i, 1, i)
print(ans)
